package com.br.venda;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import com.br.cliente.Cliente;
import com.br.cliente.ClienteRN;
import com.br.produto.Produto;
import com.br.produto.ProdutoRN;

@ManagedBean(name = "registroVendas")
@ViewScoped
public class RegistroVendaBean {
	
	
	   private Cliente clienteSelecionado;
       private Produto produtoSelecionado = new Produto();
       private List<Produto> carrinhoCompras = new ArrayList<Produto>();
       private List<SelectItem> clienteSelect;
       private float valorTotal;

       public String buscarProduto() {

               ProdutoRN produtoRN = new ProdutoRN();
               Produto produtoPesquisado = new Produto();

               if (this.produtoSelecionado.getDescricao() != null
                               && !this.produtoSelecionado.getDescricao().equals("")) {
                       produtoPesquisado = produtoRN
                                       .pesquisarPorNome(this.produtoSelecionado.getDescricao());

                       if (produtoPesquisado != null) {

                               this.carrinhoCompras.add(produtoPesquisado);
                               calculaTotal();

                       }

               }

               return null;
       }

       private void calculaTotal() {

               this.valorTotal = 0;
               if (!this.carrinhoCompras.isEmpty()) {
                       for (Produto p : this.carrinhoCompras) {
                               valorTotal += p.getValor();
                       }
               }

       }
       
       public String finalizarVenda(){
               
               
               if(!this.carrinhoCompras.isEmpty()){
                       ArrayList<Venda> vendas = new ArrayList<Venda>();
                       VendaRN vendaRN =  new VendaRN();
                       
                       for (Produto produto : this.carrinhoCompras) {
                               
                               if(this.clienteSelecionado != null){
                                       if(vendaRN.existeEstoque(produto)){
                                               vendas.add(new Venda(produto, this.clienteSelecionado));
                                       }
                               }
                       }
                       
                       for (Venda venda : vendas) {
                               venda.setDataVenda(new Date());
                               vendaRN.registraVenda(venda);
                               vendaRN.reduzEstoqueProduto(venda.getProduto());
                       }
                       
                       
               }
               
         return null;
       }

       public String excluirProdutoCarrinho(){
               
               if(this.carrinhoCompras != null && !this.carrinhoCompras.isEmpty()){
                       if(this.produtoSelecionado != null){
                               this.carrinhoCompras.remove(this.produtoSelecionado);
                               calculaTotal();
                       }
               }
               
               return null;
       }
       public Cliente getClienteSelecionado() {
               return clienteSelecionado;
       }

       public void setClienteSelecionado(Cliente clienteSelecionado) {
               this.clienteSelecionado = clienteSelecionado;
       }

       public Produto getProdutoSelecionado() {
               return produtoSelecionado;
       }

       public void setProdutoSelecionado(Produto produtoSelecionado) {
               this.produtoSelecionado = produtoSelecionado;
       }

       public List<Produto> getCarrinhoCompras() {
               return carrinhoCompras;
       }

       public void setCarrinhoCompras(List<Produto> carrinhoCompras) {
               this.carrinhoCompras = carrinhoCompras;
       }

       public float getValorTotal() {
               return valorTotal;
       }

       public void setValorTotal(float valorTotal) {
               this.valorTotal = valorTotal;
       }

       public List<SelectItem> getClienteSelect() {

               if (clienteSelect == null) {

                       clienteSelect = new ArrayList<SelectItem>();
                       ClienteRN clienteRN = new ClienteRN();
                       List<Cliente> listaClientes = clienteRN.listar();

                       if (listaClientes != null && !listaClientes.isEmpty()) {
                               SelectItem item;
                               for (Cliente clienteLista : listaClientes) {
                                       item = new SelectItem(clienteLista, clienteLista.getNome());
                                       clienteSelect.add(item);
                               }
                       }

               }

               return clienteSelect;
       }

       public void setClienteSelect(List<SelectItem> clienteSelect) {
               this.clienteSelect = clienteSelect;
       }

}


